package com.example.utils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
public class EmailUtil{ 
	final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
	public Object getAccess(String error,String receiveMailAccount) {

		
		String myEmailAccount = "cyberledger@163.com";
		// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
		// 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
		String myEmailSMTPHost = "smtp.163.com";


		// 1. 创建参数配置, 用于连接邮件服务器的参数配置
		Properties props = new Properties();                    // 参数配置
		props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议（JavaMail规范要求）
		props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
		props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
		props.setProperty("mail.smtp.starttls.enable", "true");            // 需要请求认证
		props.setProperty("mail.smtp.starttls.required", "true");            // 需要请求认证
		props.setProperty("mail.smtp.port", "465");
		props.put("mail.smtp.ssl.enable", true);
		props.setProperty("mail.smtp.socketFactory.port", "465");
		props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);

		props.setProperty("mail.smtp.socketFactory.fallback", "false");

		// 2. 根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getInstance(props);
		session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

		// 3. 创建一封邮件
		MimeMessage message;
		try {
			message = createMimeMessage(session, myEmailAccount, receiveMailAccount,error);
			Transport transport = session.getTransport();
			transport.connect("smtp.163.com",myEmailAccount,"ZFYHSZAIMXPHJWUH"); 
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
			return "success";
		} catch (Exception e) {
			return "error";
		}


	}
	public  Object sendcode(String receiveMailAccount,String code) throws Exception {
		String myEmailAccount = "cyberledger@163.com";
		// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
		// 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
		String myEmailSMTPHost = "smtp.163.com";


		// 1. 创建参数配置, 用于连接邮件服务器的参数配置
		Properties props = new Properties();                    // 参数配置
		props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议（JavaMail规范要求）
		props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
		props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
		props.setProperty("mail.smtp.starttls.enable", "true");            // 需要请求认证
		props.setProperty("mail.smtp.starttls.required", "true");            // 需要请求认证
		props.setProperty("mail.smtp.port", "465");
		props.put("mail.smtp.ssl.enable", true);
		props.setProperty("mail.smtp.socketFactory.port", "465");
		props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);

		props.setProperty("mail.smtp.socketFactory.fallback", "false");

		// 2. 根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getInstance(props);
		session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

		// 3. 创建一封邮件
		MimeMessage message;
		try {
			message = new MimeMessage(session);

			// 2. From: 发件人（昵称有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改昵称）
			message.setFrom(new InternetAddress(myEmailAccount, "管理员", "UTF-8"));

			// 3. To: 收件人（可以增加多个收件人、抄送、密送）
			message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "用户", "UTF-8"));

			// 4. Subject: 邮件主题（标题有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改标题）
			message.setSubject("区块链信息填报系统验证码", "UTF-8");

			// 5. Content: 邮件正文（可以使用html标签）（内容有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改发送内容）
			message.setContent("验证码为:"+code, "text/html;charset=UTF-8");

			// 6. 设置发件时间
			message.setSentDate(new Date());

			// 7. 保存设置
			message.saveChanges();
			Transport transport = session.getTransport();
			transport.connect("smtp.163.com",myEmailAccount,"ZFYHSZAIMXPHJWUH");
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
			return "success";
		} catch (Exception e) {
			return "error";
		}




	}
	public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,String error) throws Exception {
		// 1. 创建一封邮件
		MimeMessage message = new MimeMessage(session);

		// 2. From: 发件人（昵称有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改昵称）
		message.setFrom(new InternetAddress(sendMail, "管理员", "UTF-8"));

		// 3. To: 收件人（可以增加多个收件人、抄送、密送）
		message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "用户", "UTF-8"));

		// 4. Subject: 邮件主题（标题有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改标题）
		message.setSubject("区块链审核通知", "UTF-8");

		// 5. Content: 邮件正文（可以使用html标签）（内容有广告嫌疑，避免被邮件服务器误认为是滥发广告以至返回失败，请修改发送内容）
		message.setContent("很遗憾，贵司提交的区块链的申请未通过审核。"+error, "text/html;charset=UTF-8");

		// 6. 设置发件时间
		message.setSentDate(new Date());

		// 7. 保存设置
		message.saveChanges();

		return message;
	}
	public static void main(String[] args) throws Exception, MessagingException {
		EmailUtil util=new EmailUtil();
		util.getAccess("test", "18883331249@163.com");





	}
}
